package com.qst.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qst.order.domain.DTO.ProductStockUpdate;
import com.qst.order.domain.Product;
import com.qst.order.domain.VO.ProductRankVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface ProductMapper extends BaseMapper<Product> {
    @Update("UPDATE t_product SET stock = stock - #{quantity} \n" +
            "WHERE product_id = #{productId} AND stock >= #{quantity}\n")
    boolean decreaseStock(Integer productId, Integer quantity);


    /**
     * 批量更新库存（减少）
     * @param stockUpdates 库存更新列表
     * @return 更新的记录数
     */
    int batchUpdateStock(List<ProductStockUpdate> stockUpdates);

    // 批量恢复库存（新增方法）
    int batchIncreaseStock(@Param("list") List<ProductStockUpdate> stockUpdates);

    IPage<Product> getStock(IPage<Product> productIPage,@Param("keyword") String keyword,
                            @Param("userId") Integer userId,@Param("category")String category,@Param("status") Integer status);



    /**
     * 批量为商品补货
     * @param productIds 商品ID列表
     * @param quantity 补货数量
     * @param updateTime 更新时间
     * @return 受影响的行数
     */
    int batchReplenish(
            @Param("productIds") List<Integer> productIds,
            @Param("quantity") Integer quantity,
            @Param("updateTime") LocalDateTime updateTime
    );


    /**
     * 获取商品排名
     * @param type 排序类型（sales/stock）
     * @return 商品排名列表
     */
    List<Map<String, Object>> getProductRank(@Param("type") String type);
}
